// 数组nn格式, 不局限于十进制
export function formatNum(n) {
	n = n.toString()
	return n[1] ? n : `0${n}`
}

// 将秒数转化成 00:00 的形式
export function formatSecond(time) {
	const minute = Math.floor(time / 60)
	const second = time % 60
	return formatNum(minute) + ':' + formatNum(second)
}

// 16进制字符串转ArrayBuffer
export function str2ab(str) {
	if (!str) return
	const array = []
	for (let i = 0; i < str.length; i += 2) {
		array.push(str.substring(i, i + 2))
	}
	const val = array.join(',')
	return new Uint8Array(val.match(/[\da-f]{2}/gi).map(item => parseInt(item, 16))).buffer
}

// ArrayBuffer转16进制字符串
export function ab2str(ab) {
	return Array.prototype.map.call(
		new Uint8Array(ab),
		(bit) => formatNum(bit.toString(16))
	).join('')
}

export function ab2hex(buffer) {
	var hexArr = Array.prototype.map.call(new Uint8Array(buffer), function(bit) {
		return ('00' + bit.toString(16)).slice(-2);
	});
	return hexArr.join('');
}
// int转16进制4位小端模式，如果是8位就把2 ** 16 改为 2 ** 32
export function dec2hex(num, len = 4) { // len为输出的是4位还是8位
	return (num + 2 ** (4 * len)).toString(16).match(/\B../g).reverse().join('')
}

// 16进制小端模式转int, 请先确保str是一个16进制数，且有4n位
export function hex2dec(str) {
	return parseInt(str.match(/../g).reverse().join(''), 16)
}

// 16进制转对应ascll字符串
export function hex2ascll(hex) {
	let str = ''
	for (let i = 0; i < hex.length; i += 2) {
		str += String.fromCharCode(parseInt(hex.substr(i, 2), 16))
	}
	return str.trim() // 有可能尾巴有空格
}

// 16进制有符号数
export function parseShort(num, len = 4) { // len为字符数，默认4字符2字节
	const posMax = (16 ** len) / 2 - 1 // 能够表示的最大正数
	if (num > posMax) {
		return num - 16 ** len
	} else if (num === posMax) {
		return 0
	} else {
		return num
	}
}

// Array.chunk, 将数组按size分成n段
export function chunk(arr, size) {
	if (arr.length <= 0 || size <= 0) {
		return arr
	}
	let chunks = []
	for (let i = 0; i < arr.length; i = i + size) {
		chunks.push(arr.slice(i, i + size))
	}
	return chunks
}
// 字符串转byte
export function stringToBytes(str) {
	var array = new Uint8Array(str.length);
	for (var i = 0, l = str.length; i < l; i++) {
		array[i] = str.charCodeAt(i);
	}
	// console.log(array);
	return array.buffer;
}